# 1.类的定义
# 类的作用为：可以实现共享方法
class Calculator
    def divide(x, y)
        x / y
    end
end

# 通过给类（此处为Calculator）发送new 消息，新建对象
c = Calculator.new

puts c.class
# <Calculator>

puts(c.divide(4, 3))


# 2. 继承：一个类可以通过继承的当打引入父类的方法定义
# 此处MultiplyCalculator 的父类是Calculator
class MultiplyCalculator < Calculator
    def multiply(x, y)
        x * y
    end
end

mc = MultiplyCalculator.new
puts(mc.class)  # MultiplyCalculator
puts(mc.class.superclass)   # Calculator
p mc.multiply(4, 5)

# 调用父类的方法
puts(mc.divide(10, 3))

class BinaryMultiplyingCalculator < MultiplyCalculator
    def multiply(x, y)
        # 这里使用super 可以调用父类（超类）的重名方法multiply
        result = super(x, y)
        result.to_s(2)
        # 将结果转换为二进制数
    end
end

bmc = BinaryMultiplyingCalculator.new

puts bmc.multiply(10, 2)


# 3.模块module，也可以实现共享方法
module Addition
    def add(x, y)
        x + y
    end
end

class AddingCalculator
    include Addition
end

ac = AddingCalculator.new
add_result = ac.add(10, 2)
puts(add_result)
# 12